home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
hls.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
3KB
|
109 lines
; $Id: hls.pro,v 1.3 1997/01/15 03:11:50 ali Exp $
;
; Copyright (c) 1983-1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
Pro HLS, Litlo, Lithi, Satlo, Sathi, Hue, Loops, Colr
;+
; NAME:
; HLS
;
; PURPOSE:
; Make a color table based on the HLS (Hue, Lightness, Saturation)
; color system.
;
; CATEGORY:
; Z4 - Image processing, color table manipulation
;
; CALLING SEQUENCE:
; HLS, Litlo, Lithi, Satlo, Sathi, Hue, Loops [, Colr]
;
; INPUTS:
; Litlo: Starting lightness, from 0 to 100%.
;
; Lithi: Ending lightness, from 0 to 100%.
;
; Satlo: Starting saturation, from 0 to 100%.
;
; Sathi: Ending stauration, from 0 to 100%.
;
; Hue: Starting Hue, from 0 to 360 degrees. Red = 0 degs,
; green = 120, blue = 240.
;
; Loops: The number of loops through the color spiral. This
; parameter does not have to be an integer. A negative value
; causes the loops to traverse the spiral in the opposite
; direction.
;
; OUTPUTS:
; No required outputs.
;
; OPTIONAL OUTPUT PARAMETERS:
; Colr: A (256,3) integer array containing the R, G, and B values
; that were loaded into the color tables.
; Red = colr(*,0), green = colr(*,1), blue = colr(*,2).
;
; COMMON BLOCKS:
; COLORS: Contains the red, green, and blue vectors on exit.
;
; SIDE EFFECTS:
; The color tables are loaded.
;
; RESTRICTIONS:
; None.
;
; PROCEDURE:
; Adapted from program on page 619, Fundamentals of Interactive
; Computer Graphics, Foley and Van Dam.
;
; Using the input parameters, a spiral through the double-
; ended HLS cone is traced. Points along the cone
; are converted from HLS to RGB.
;
; MODIFICATION HISTORY:
; Written, DMS, Jan, 1983.
; Changed common block, dms, 4/1987.
;-
common colors,red,green,blue,cur_red,cur_green,cur_blue
on_error,2 ;Return to caller if an error occurs
S = (sathi-satlo)/25600.*findgen(256)+satlo/100.
L = (Lithi-Litlo)/25600.*findgen(256)+litlo/100.
HG = Loops*360./256.*findgen(256)+ Hue
Hmin = Min(hg)/360.
IF HMIN LT 0. THEN HMIN = FIX(HMIN)-1 ELSE $
HMIN =FIX(HMIN)
HG = (HG - Hmin*360.) mod 360. ;Make all positive
HR = (HG +120) mod 360.
HB = (HG +240) mod 360.
;
N2 = (L LE .5)*(L+L*S) + (L GT .5)*(L+S-L*S)
N1 = 2*L - N2
N21 = (N2-N1)/60.
COLR = FLTARR(256,3)
;
FOR I=0,255 DO BEGIN ;What a mess.
IF S[I] EQ 0. THEN COLR[I,*]=L[I] ELSE BEGIN
IF HR[I] LT 60. THEN COLR[I,0]=N1[I]+N21[I]*HR[I] ELSE $
IF HR[I] LT 180. THEN COLR[I,0]=N2[I] ELSE $
IF HR[I] LT 240. THEN COLR[I,0]=N1[I]+N21[I]*(240.-HR[I]) ELSE $
COLR[I,0]=N1[I]
IF HG[I] LT 60. THEN COLR[I,1]=N1[I]+N21[I]*HG[I] ELSE $
IF HG[I] LT 180. THEN COLR[I,1]=N2[I] ELSE $
IF HG[I] LT 240. THEN COLR[I,1]=N1[I]+N21[I]*(240.-HG[I]) ELSE $
COLR[I,1]=N1[I]
IF HB[I] LT 60. THEN COLR[I,2]=N1[I]+N21[I]*HB[I] ELSE $
IF HB[I] LT 180. THEN COLR[I,2]=N2[I] ELSE $
IF HB[I] LT 240. THEN COLR[I,2]=N1[I]+N21[I]*(240.-HB[I]) ELSE $
COLR[I,2]=N1[I]
ENDELSE
ENDFOR
;
COLR = FIX(COLR*255.)<255 ;CVT TO 0, 255.
RED = COLR[*,0] ;SAVE IN COMMON
GREEN = COLR[*,1]
BLUE = COLR[*,2]
TVLCT,RED,GREEN,BLUE ;LOAD COLORS
cur_red = red & cur_green = green & cur_blue = blue
RETURN
END